package cn.amaake.magicplugin.satoken.functions;


import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.exception.NotRoleException;
import cn.dev33.satoken.stp.StpUtil;
import org.ssssssss.magicapi.core.annotation.MagicModule;
import org.ssssssss.script.annotation.Comment;

import java.util.List;

@MagicModule("satoken")
public class SatokenFunction {

    @Comment("获取：当前账号所拥有的权限集合")
    public List<String> getPermissionList(){
        return StpUtil.getPermissionList();
    }


    @Comment("判断：当前账号是否含有指定权限, 返回 true 或 false  ")
    public boolean hasPermission(@Comment("Permission") String value){
        return StpUtil.hasPermission(value);
    }

    @Comment("校验：当前账号是否含有指定权限, 如果验证未通过，则抛出异常: NotPermissionException ")
    public boolean checkPermission(@Comment("Permission") String value){
        try{
            StpUtil.checkPermission(value);
            return true;
        }catch (NotPermissionException e){
            e.printStackTrace();
            return false;
        }
    }

    @Comment("校验：当前账号是否含有指定权限 [指定多个，必须全部验证通过]")
    public boolean checkPermissionAnd(String... permissionArray){
        try{
            StpUtil.checkPermissionAnd(permissionArray);
            return true;
        }catch (NotPermissionException e){
            e.printStackTrace();
            return false;
        }
    }

    @Comment("校验：当前账号是否含有指定权限 [指定多个，只要其一验证通过即可] ")
    public boolean checkPermissionOr(String... permissionArray){
        try{
            StpUtil.checkPermissionOr(permissionArray);
            return true;
        }catch (NotPermissionException e){
            e.printStackTrace();
            return false;
        }
    }

    @Comment("获取：当前账号所拥有的角色集合")
    public List<String> getRoleList(){
        return StpUtil.getRoleList();
    }

    @Comment("判断：当前账号是否拥有指定角色, 返回 true 或 false")
    public boolean hasRole(String value){
        return StpUtil.hasRole(value);
    }

    @Comment("校验：当前账号是否含有指定角色标识, 如果验证未通过，则抛出异常: NotRoleException")
    public boolean checkRole(String value){
        try{
            StpUtil.checkRole(value);
            return true;
        }catch (NotRoleException e){
            e.printStackTrace();
            return false;
        }
    }

    @Comment("校验：当前账号是否含有指定角色标识 [指定多个，必须全部验证通过]")
    public boolean checkRoleAnd(String... roleArray){
        try{
            StpUtil.checkRoleAnd(roleArray);
            return true;
        }catch (NotRoleException e){
            e.printStackTrace();
            return false;
        }
    }

    @Comment("校验：当前账号是否含有指定角色标识 [指定多个，只要其一验证通过即可] ")
    public boolean checkRoleOr(String... roleArray){
        try{
            StpUtil.checkRoleOr(roleArray);
            return true;
        }catch (NotRoleException e){
            e.printStackTrace();
            return false;
        }
    }

}
